home *** CD-ROM | disk | FTP | other *** search
-
- Path: rice!cs.utexas.edu!uwm.edu!srcsip!jhereg!com50!pai!erc
- From: erc@pai.UUCP (Eric Johnson)
- Newsgroups: comp.graphics
- Subject: Re: PCX's format
- Date: 8 Jun 90 14:28:12 GMT
- Organization: Boulware Technologies, Inc., Burnsville, MN
-
-
- A long while back, I wrote a screen-dump utility that output a MONOCHROME
- .PCX (PC-PaintBrush) file. Contact Z-Soft, the makers of PC-PaintBrush for
- a full technical manual on the .PCX file format. In '86, I had some problems
- with the manual (there seemed to be a few gaps), so enclosed below is part of
- a Boulware Technologies (the firm I work for) Tech Note I wrote on the subject.
- The note is old and if you find any errors, sorry. Z-Soft is, of course,
- the primary source for information on this. I suggest you contact them.
-
- Since much of the note deals with how I allowed the user to map any of
- the 16 EGA colours to black or white dots (these screen dumps are for
- use by the documentation staff), I deleted the parts that won't be
- relevant for you.
-
- (.PCX files do allow colour and typically use four colour planes. The data
- is then output one plane at a time in the file. See the Z-Soft manual
- for more info.)
-
- -------
-
- PAWS Tech Note 29
-
- PC-Paintbrush Graphics Dumps
-
- 4 March 88 E F Johnson
-
- A VERY technical tech note describing the new way of making PAWS
- screen dumps into the standard-format .PCX files.
-
- ...
-
- [...PAWs-related stuff deleted. I really don't think you want information
- on our factory automation interface. If you do, send me email...]
-
- ...
-
- 3) To print out a .PCX file, use the PC-Paintbrush or Ventura Publisher
- packages for the PC. No translation program is needed.
-
-
-
- 4) A .PCX file has the following format:
-
- First, it has a 128-byte header, which looks like (in order in the file):
-
-
- SIZE in BYTES DECSRIPTION DEFINITION
- 1 Manufacturer 10 == PC-Paintbrush PCX
- 1 Version 0 == 2.5
- 2 == 2.8 with palette info
- 3 == 2.8 without palette info
- 5 == 3.0 with palette info
- 1 Encoding 1 == .PCX run-length encoding
- 1 Bits per pixel we use 1 for mono images
- 8 WINDOW (MinX, MinY) (MaxX, MaxY)
- 2 Horizontal Res Horizontal Resolution
- 2 Vertical Res Vertical Resolution
- 48 ( 16 * 3 ) ColourMap R, G, B for each of 16 colours
- The colour Map used is:
- 0, 0, 0
- 255, 255, 255
- 0, 170, 0
- 0, 170, 170
- 170, 0, 0
- 170, 0, 170
- 170, 170, 0
- 170, 170, 170
- 85, 85, 85
- 85, 85, 255
- 85, 255, 85
- 85, 255, 255
- 255, 85, 85
- 255, 85, 255
- 255, 255, 85
- 255, 255, 255
-
- 1 reserved (this puts in a 0)
- 1 Num Planes Number of colour planes, this uses 1
- 2 Bytes Per line 640 pixels/8 = 80 bytes per line
-
- The rest of the 128-byte header is padded with zeroes.
-
- NOTE: integer values (2 bytes) are in PC byte-order in the Big-endian/
- Little-endian scheme. The PAWS code uses a union of:
- union
- {
- char cpart[ 2 ];
- int ipart;
- } u;
-
- to convert ints to two bytes in the header.
-
-
-
- The data in the file comes after the header. The data section contains
- a set of scan-lines, running by pixel from left-to-right, then top-to-bottom.
-
- Each scan-line contains bytes with 8 pixels each (since this is monochrome,
- each bit represents one pixel). PC-Paintbrush uses an encoding scheme
- to conserve on file space. Basically, the scheme compares adjacent bytes
- in one scan-line. If the adjacent bytes are the same, it the writes out
- a flag ( 0xC0 ) with a count ( actually 0xC0 | count ). The next byte is
- the data byte that is repeated. For example, if five bytes are the same
- 01 (in hex),
-
- 01 01 01 01 01
-
- the .PCX output is only two bytes
-
- C5 01
-
- where C5 means special flag (C) with a count of 5, and the 01 in the
- next position is the data byte.
-
- If there is no match in the next byte, .PCX files just use the plain data
- byte (implicit count of 1). For example, if the byte stream is
-
- 01 01 01 01 01 04 01 01
-
- the .PCX output is
-
- C5 01 04 C2 01
-
-
- Note: this .PCX format breaks down in two cases:
-
- i) If the byte value is >= 0xC0, (the flag code == top two bits are on),
- then the format must use a C1 (flag with count 1)
-
- ii) If there are more than 15 bytes the same, the count makes the 0xC0 become
- 0xD0 or higher. This confuses the decoding software in PC-Paintbrush.
- Instead, only use counts UNDER 15. If there are 17 of the same bytes in
- a row, use two count flags, e.g.,
-
- 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
-
- becomes
-
- CE 01 C3 01
-
-
-
-
- More information on PC-Paintbrush file format can be found in the Z-Soft
- Technical Reference Manual, 1986 version.
-
- **
- **
- */
-
- /* -- defines for PC Paint Header */
-
- #define PCPAINT 10 /* -- .PCX file */
- #define PCXVERSION 5 /* -- PCPaint 3.0 w/ palette info */
- #define ENCODING 1 /* -- .PCX encoding */
- #define BITSPERPIXEL 1 /* -- Monochrome */
- #define NUMPLANES 1 /* -- Monochrome */
- #define WIND_X1 0 /* -- Window Coords */
- #define WIND_Y1 0 /* -- Window Coords */
- #define WIND_X2 639 /* -- Window Coords */
- #define WIND_Y2 349 /* -- Window Coords */
- #define HRES 640 /* -- Horizontal Resolution */
- #define VRES 350 /* -- Vertical Resolution */
- #define BYTESPERLINE 80 /* -- Bytes per scan line */
-
- Hope this helps,
- -Eric
-
-
-
- --
- Eric F. Johnson, Boulware Technologies, Inc.
- 415 W. Travelers Trail, Burnsville, MN 55337 USA. Phone: +1 612-894-0313.
- erc@pai.mn.org - or - bungia!pai!erc
- "Things are more like they are now than they've ever been," US President Ford.
-
-
-